import subprocess
import sys
import os

def merge_video_audio(video_path, audio_path, output_path):
    """
    使用FFmpeg合并视频和音频文件
    :param video_path: MP4视频文件路径
    :param audio_path: M4A音频文件路径
    :param output_path: 输出文件路径
    """
    # 检查文件是否存在
    if not os.path.exists(video_path):
        raise FileNotFoundError(f"视频文件不存在: {video_path}")
    if not os.path.exists(audio_path):
        raise FileNotFoundError(f"音频文件不存在: {audio_path}")
    
    # 构建FFmpeg命令
    command = [
        'ffmpeg',
        '-y',  # 覆盖输出文件
        '-i', video_path,
        '-i', audio_path,
        '-c:v', 'copy',  # 复制视频流
        # '-c:a', 'aac',   # 使用AAC编码音频
        '-c:a', 'copy',  # 直接复制音频流
        '-strict', 'experimental',
        '-map', '0:v:0',  # 选择第一个输入的视频流
        '-map', '1:a:0',  # 选择第二个输入的音频流
        '-shortest',      # 以最短的输入流结束
        output_path
    ]
    
    try:
        # 执行命令
        result = subprocess.run(command, check=True, capture_output=True, text=True)
        print("合并成功！输出文件:", output_path)
        return True
    except subprocess.CalledProcessError as e:
        print("合并失败！错误信息:")
        print(e.stderr)
        return False
    except Exception as e:
        print("发生未知错误:", str(e))
        return False

if __name__ == "__main__":
    # 命令行参数处理
    if len(sys.argv) != 4:
        print("用法: python merge.py <视频文件.mp4> <音频文件.m4a> <输出文件.mp4>")
        sys.exit(1)
    
    video_file = sys.argv[1]
    audio_file = sys.argv[2]
    output_file = sys.argv[3]
    
    # 执行合并
    merge_video_audio(video_file, audio_file, output_file)